Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Model View Controller</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Model_View_Controller"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Model_View_Controller rootpage-Model_View_Controller skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Model View Controller</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p><b><span lang="en">Model View Controller</span></b> (<b>MVC</b>, <a href="Englische_Sprache" title="Englische Sprache">englisch</a> für <i>Modell-Ansicht-Steuerung</i>) ist ein <a href="Entwurfsmuster" title="Entwurfsmuster">Entwurfsmuster</a> zur Unterteilung einer <a href="Software" title="Software">Software</a> in die drei Komponenten <i>Datenmodell</i> (englisch <i><span lang="en">model</span></i>), <i>Ansicht</i> (englisch <i><span lang="en">view</span></i>) und <i>Programmsteuerung</i> (englisch <i><span lang="en">controller</span></i>). Das Muster kann sowohl als <a href="Architekturmuster" title="Architekturmuster">Architekturmuster</a> als auch als Entwurfsmuster eingesetzt werden.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Ziel des Musters ist ein flexibler Programmentwurf, der eine spätere Änderung oder Erweiterung erleichtert und eine Wiederverwendbarkeit der einzelnen Komponenten ermöglicht. Es ist dann zum Beispiel möglich, eine Anwendung zu schreiben, die dasselbe Modell nutzt und es dann für Windows, Mac, Linux oder für das Internet zugänglich macht. Die Umsetzungen nutzen dasselbe Modell, nur Controller und View müssen dabei jeweils neu implementiert werden.
</p><p>Das MVC-Konzept wurde 1979 zunächst für Benutzeroberflächen in <a href="Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a> durch <a href="Trygve_Reenskaug" class="mw-redirect" title="Trygve Reenskaug">Trygve Reenskaug</a> beschrieben (Seeheim-Modell), der damals an Smalltalk im <a href="Xerox_PARC" title="Xerox PARC">Xerox PARC</a> arbeitete. Es gilt mittlerweile aber als De-facto-Standard für den Grobentwurf vieler komplexer Softwaresysteme, teils mit Differenzierungen und oftmals mehreren jeweils nach dem MVC-Muster aufgeteilten Modulen.
</p>

<div class="mw-heading mw-heading2"><h2 id="Klassisches_Architekturmuster">Klassisches Architekturmuster</h2></div>
<p>Die drei Komponenten hängen je nach Umsetzung unterschiedlich stark voneinander ab:
</p>
<div class="mw-heading mw-heading3"><h3 id="Modell_(model)"><span id="Modell_.28model.29"></span>Modell <i>(<span lang="en">model</span>)</i></h3></div>
<p>Das Modell enthält Daten, die von der Ansicht dargestellt werden. Es ist von Ansicht und Steuerung unabhängig. Die Änderungen der Daten werden der Ansicht durch das <a href="Beobachter_(Entwurfsmuster)" title="Beobachter (Entwurfsmuster)">Entwurfsmuster „Beobachter“</a> bekanntgegeben. In manchen Umsetzungen des MVC-Musters enthält das Modell eine <a href="Gesch%C3%A4ftslogik" title="Geschäftslogik">Geschäftslogik</a>, die für die Änderung der Daten zuständig ist.
</p>
<div class="mw-heading mw-heading3"><h3 id="Ansicht_(view)"><span id="Ansicht_.28view.29"></span>Ansicht <i>(<span lang="en">view</span>)</i></h3></div>
<p>Die Ansicht ist für die Darstellung der Daten des Modells und die Realisierung der Benutzerinteraktionen zuständig. Sie kennt das Modell, dessen Daten sie präsentiert, ist aber nicht für die Verarbeitung dieser Daten zuständig. Des Weiteren ist sie von der Steuerung unabhängig. Die Bekanntgabe von Benutzerinteraktionen an die Steuerung geschieht nach dem Entwurfsmuster „Beobachter“. Die Ansicht wird über Änderungen der Daten im Modell mithilfe des Entwurfsmuster „Beobachter“ unterrichtet und kann daraufhin die Darstellung aktualisieren. Die Ansicht verwendet oft das <a href="Kompositum_(Entwurfsmuster)" title="Kompositum (Entwurfsmuster)">Entwurfsmuster „Kompositum“</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Steuerung_(controller)"><span id="Steuerung_.28controller.29"></span>Steuerung <i>(<span lang="en">controller</span>)</i></h3></div>
<p>Die Steuerung verwaltet die Ansicht und das Modell. Sie wird von der Ansicht über Benutzerinteraktionen (mithilfe des <a href="Beobachter_(Entwurfsmuster)" title="Beobachter (Entwurfsmuster)">Entwurfsmusters „Beobachter“</a>) informiert, wertet diese aus und nimmt daraufhin Anpassungen an der Ansicht sowie Änderungen an den Daten im Modell vor. In einigen modernen Implementierungen des MVC-Musters aktualisiert die Steuerung die Daten im Modell nicht mehr direkt, stattdessen aktualisiert sie die Daten indirekt, indem sie auf die im Modell implementierte Geschäftslogik zugreift. In einem Spezialfall des MVC-Musters kann die Steuerung auch mehrere Ansichten oder mehrere Modelle gleichzeitig verwalten.
</p>
<div class="mw-heading mw-heading3"><h3 id="Nicht_festgelegte_Funktionalitäten"><span id="Nicht_festgelegte_Funktionalit.C3.A4ten"></span>Nicht festgelegte Funktionalitäten</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Geschäftslogik"><span id="Gesch.C3.A4ftslogik"></span>Geschäftslogik</h4></div>
<p>Da das MVC-Muster in verschiedenen Programmiersprachen unterschiedlich realisiert werden muss, gibt es keine allgemeingültige Definition, wo die <a href="Gesch%C3%A4ftslogik" title="Geschäftslogik">Geschäftslogik</a> innerhalb der MVC-Klassen angesiedelt werden sollte. Sie wird – historisch bedingt – oft noch im Controller programmiert, aber heute zunehmend im Modell implementiert. So enthält das Modell alle <a href="Gesch%C3%A4ftsobjekt" title="Geschäftsobjekt">Geschäftsobjekte</a> mit allen ihren Daten und Funktionen und kann deshalb isoliert, schnell, vollständig und automatisiert getestet werden. Einige MVC-<a href="Framework" title="Framework">Frameworks</a> schreiben strikt vor, wo die Geschäftslogik zu implementieren ist, andere überlassen diese Entscheidung den Softwareentwicklern.
</p>
<div class="mw-heading mw-heading4"><h4 id="Validierung_von_Benutzereingaben">Validierung von Benutzereingaben</h4></div>
<p>In ähnlicher Weise ist der Ort für die <a href="Datenvalidierung" title="Datenvalidierung">Validierung</a> der Benutzereingaben nicht definiert. Einfache Formatvalidierungen können bereits im View realisiert werden. Validierungen, welche stärker die <a href="Gesch%C3%A4ftslogik" title="Geschäftslogik">Geschäftslogik</a> berücksichtigen müssen, werden eher im Modell oder in der Steuerung implementiert.
</p>
<div class="mw-heading mw-heading4"><h4 id="Daten-Formatierung_und_Internationalisierung">Daten-Formatierung und Internationalisierung</h4></div>
<p>Auch für die Formatierung der Rohdaten und die <a href="Internationalisierung_(Softwareentwicklung)" title="Internationalisierung (Softwareentwicklung)">Internationalisierung</a> ist nicht definiert, wo diese erfolgen. Aus Gründen der Entwicklungseffizienz bietet es sich oft an, diese im Modell zu integrieren, so dass man sich beim View auf die Erstellung von Widgets oder Templates beschränken kann. Andererseits werden dadurch Aspekte der Darstellung in das Modell verlagert, was zur Grundidee durchaus im Widerspruch steht. Als Variante bietet es sich daher auch an, hierfür eigenständige Funktionsbereiche vorzusehen, die man dann weder Model, View noch Controller zurechnen muss.
</p>
<div class="mw-heading mw-heading2"><h2 id="Heutige_Umsetzungen">Heutige Umsetzungen</h2></div>
<p>Die Begriffe des ursprünglichen MVC-Musters werden heute oft entlehnt, um Systeme begreiflich zu machen, die weitaus komplexer sind als die damalige Software. Dabei kommt es auf die Perspektive des betrachteten Teilsystems an, welche Elemente damit bezeichnet werden. So könnte ein <a href="Webbrowser" title="Webbrowser">Webbrowser</a> als View eines größeren Gesamtsystems verstanden werden, während schon ein einzelnes Formularelement im Browser wiederum aus einem kleinen Datenmodell, der zugehörigen Darstellung und seiner Steuerung besteht. Die Grundidee der Trennung von Model, View und Controller hat sich erhalten, wird aber feiner granuliert und verschachtelt eingesetzt.
</p><p>Während sich viele Projekte als Model-View-Controller-Architektur definieren, wird der Begriff sehr vielfältig benutzt. Es etablieren sich neue Begriffe, wie das <a href="Model-View-Presenter" class="mw-redirect" title="Model-View-Presenter">Model-View-Presenter</a>-, das <a href="Model_View_ViewModel" title="Model View ViewModel">Model-View-ViewModel</a>- oder das Model-View-Adapter-Muster, die versuchen, die Varianten präziser zu beschreiben.
</p>
<div class="mw-heading mw-heading3"><h3 id="Widget-Bibliotheken_für_Desktop-Applikationen"><span id="Widget-Bibliotheken_f.C3.BCr_Desktop-Applikationen"></span>Widget-Bibliotheken für Desktop-Applikationen</h3></div>
<p>Als <a href="Widget" title="Widget">Widgets</a> werden die einzelnen Komponenten <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">grafischer Benutzeroberflächen</a> (GUI) bezeichnet, wie <a href="Men%C3%BC_(Computer)" title="Menü (Computer)">Menüpunkte</a> oder <a href="Textfeld" title="Textfeld">Textfelder</a>. Widgets zeichnen sich dadurch aus, dass sie neben der Ansicht auch typische Merkmale des klassischen Controllers in einer Komponente vereinen, wie das Event-Handling. Einige Widgets, wie z.&nbsp;B. Auswahllisten, können sogar über ein eigenes internes Modell verfügen, wobei dieses dann mit dem eigentlichen Modell synchronisiert werden muss.
</p><p>Obwohl die Widgets die feste Dreiteilung durchbrechen, spricht man trotzdem noch von einer Model-View-Controller-Architektur. Es kommen auch Komponenten wie Filter zur Sortierung oder Bestätigungsdialoge vor, die sich nicht eindeutig in die klassische Dreiteilung einordnen lassen.
</p><p>Bei der Anwendung der Widget-<a href="Programmbibliothek" title="Programmbibliothek">Bibliotheken</a> überlässt der Controller damit einen Teil der klassischen Controller-Funktion den Widgets und beschränkt sich auf die Steuerung des Models und gegebenenfalls anderer Komponenten des Views.
</p><p>Die Bedeutung des MVC-Entwurfsmusters wird noch klarer, wenn man sich in die Lage der Entwickler von GUI-<a href="Framework" title="Framework">Frameworks</a> versetzt. Hier besteht die Herausforderung darin, dass zum Entwicklungszeitpunkt der <a href="Steuerelement" title="Steuerelement">GUI Widgets</a> <i>(<span lang="en">View</span>)</i> nicht feststeht, welche fachlichen Daten und Datenstrukturen (Modell) präsentiert und welche fachlichen Abläufe <i>(<span lang="en">Control</span>)</i> realisiert werden sollen. Damit besteht die Aufgabe der Entwickler eines GUI-Frameworks auch darin, eine Abstraktion für das Modell in Form von Schnittstellen bereitzustellen. An der Abbildung lässt sich gut erkennen, dass einzelne Teile, wie die Datenspeicherung oder das Aussehen, problemlos ausgetauscht werden können.
</p><p>Das MVC-Entwurfsmuster definiert auch den Rahmen für die Entwickler von GUI-Frameworks. Ein fertiges GUI-Framework beinhaltet:
</p>
<ol><li>eine Ansicht <i>(<span lang="en">view</span>)</i> in Form ausimplementierter GUI-Widgets,</li>
<li>die Vereinbarung eines zugrundeliegenden Datenmodells in Form von Schnittstellen,</li>
<li>die Vereinbarung von <a href="Ereignis_(Programmierung)" title="Ereignis (Programmierung)">Ereignissen</a> (englisch <i>events</i>) auf Grund von Benutzerinteraktionen in Form von <a href="Schnittstelle_(Objektorientierung)" title="Schnittstelle (Objektorientierung)">Schnittstellen</a> und ausimplementierten <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a> sowie</li>
<li>die Vereinbarung von Ereignissen auf Grund von Modelländerungen in Form von Schnittstellen und ausimplementierten Klassen.</li></ol>
<div class="mw-heading mw-heading3"><h3 id="Zusammenspiel_von_Server_und_Browser_bei_Webanwendungen">Zusammenspiel von Server und Browser bei Webanwendungen</h3></div>
<p>Im weiteren Sinne verteilt sich das MVC-Muster bei Webanwendungen über Server und Browser und ist damit komplexer als das klassische MVC-Muster. Abstrakt betrachtet übernimmt der Browser dabei die sichtbare Darstellung und unmittelbaren Nutzereingaben sowie die nicht seitenspezifischen Funktionen von Controller und View. Der Server kümmert sich um spezifische Steuerung des Browsers, indem er mit diesem über <a href="HTTP" class="mw-redirect" title="HTTP">HTTP</a> kommuniziert.
</p><p>Im engeren Sinne versteht man darunter aber nur das serverseitige Programm. Dabei kann man noch einmal zwischen dem Webserver für statische Webseiten oder dessen Delegation an spezielle Zusatzprogramme unterscheiden. Der Begriff MVC findet insbesondere im Rahmen solcher Zusatzprogramme zum Webserver Verwendung.
</p>
<div class="mw-heading mw-heading4"><h4 id="Model">Model</h4></div>
<p>Für den Browser ist die <a href="Webseite" title="Webseite">HTML-Seite</a> der Datenkern seines Models. Aus der Perspektive des Gesamtsystems ist sie nur eine Sicht auf das Gesamtmodel, welches auf dem Server lokalisiert ist.
</p>
<div class="mw-heading mw-heading4"><h4 id="View">View</h4></div>
<p>Der Browser kümmert sich um die allgemeinen Funktionen, wie die Darstellung von Text, Formularelementen und eingebetteten Objekten. Die Darstellung wird dabei im Speziellen durch den View-Programmteil des Servers per HTTP-Response gesteuert, deren Hauptteil der Darstellungsanweisung aus der HTML-Seite besteht.
</p>
<div class="mw-heading mw-heading4"><h4 id="Controller">Controller</h4></div>
<p>Der Browser akzeptiert Formulareingaben und sendet diese ab oder nimmt das <a href="Anklicken" class="mw-redirect" title="Anklicken">Anklicken</a> eines Links entgegen. In beiden Fällen sendet er einen HTTP-Request an den Server. Der Controller-Programmteil verarbeitet die Daten der HTTP-Requests und stößt schließlich die Erstellung eines neuen Views an.
</p>
<div class="mw-heading mw-heading4"><h4 id="JavaScript">JavaScript</h4></div>
<p>Die Webseite kann Programmcode enthalten, normalerweise <a href="JavaScript" title="JavaScript">JavaScript</a>, z.&nbsp;B. für die browserseitige Validierung von Formulareingaben oder Steuerungslogiken zum Nachladen von Inhalten. Dieser Programmcode lässt sich wiederum nach dem MVC-Muster gliedern und so als Teil des Gesamtsystems betrachten. Zu beachten ist, dass der Einsatz von <a href="Client" title="Client">clientseitiger Logik</a>, welche nach dem MVC-Muster strukturiert ist, von einem serverseitig verwendeten MVC zu differenzieren ist. Client und Server stellen getrennte Teilsysteme dar. Solche <a href="Webanwendung" title="Webanwendung">Webanwendungen</a> werden häufig nach dem <a href="Single-Page-Webanwendung" title="Single-Page-Webanwendung">Single-Page-Paradigma</a> umgesetzt.
</p>
<div class="mw-heading mw-heading4"><h4 id="Verzicht_auf_das_Observer-Muster">Verzicht auf das Observer-Muster</h4></div>
<p>Bei klassischen Webanwendungen kann der Browser nicht nach dem klassischen <a href="Beobachter_(Entwurfsmuster)" title="Beobachter (Entwurfsmuster)">Observer-Muster</a> unmittelbar auf Änderungen des Models auf dem Server reagieren. Jede Antwort (HTTP-Response) an den Browser setzt eine Anfrage (HTTP-Request) voraus. Man spricht vom Request-Response-Cycle. Daraus folgt, dass das Observer-Muster auch auf Seiten des Servers seine Vorteile nicht ausspielen kann. Weil es somit einen Mehraufwand bedeutet hätte, kam es typischerweise nicht zum Einsatz. Stattdessen tritt meist der Controller als aktiver Vermittler zwischen Model und View im Rahmen eines Request-Response-Cycles auf.
</p><p>Neuere <a href="Webanwendung" title="Webanwendung">Webanwendungen</a> erlauben bereits die Implementierung eines Observer-Musters. Die hierbei verwendete <a href="Push-Medien" title="Push-Medien">Push-Technologie</a> (Server-Push) erlaubt dem Server, Ereignisse direkt und ohne Anfrage an die Clients zu übermitteln. Viele Implementierungen nutzen hierbei das sogenannte <a href="Long_Polling" title="Long Polling">Long Polling</a> (Request mit verzögerter Antwort, bis ein Ereignis eintritt) oder die neueren <a href="WebSocket" title="WebSocket">Websockets</a>. Einige JavaScript-Frameworks abstrahieren hierbei das Push-Verfahren und nutzen „das Beste“ vom jeweiligen Browser bzw. der Serveranwendung zur Verfügung gestellte Verfahren. Somit ist es auch möglich, das Observer-Muster in Webanwendungen einzuführen.
</p>
<div class="mw-heading mw-heading4"><h4 id="Die_besonderen_Herausforderungen_des_Hyperlinks_und_der_Form-Action">Die besonderen Herausforderungen des Hyperlinks und der Form-Action</h4></div>
<p>Der <a href="Hyperlink" title="Hyperlink">Hyperlink</a> ist ein herausragendes Merkmal von <a href="Webanwendung" title="Webanwendung">Webapplikationen</a>. In einer klassischen GUI-Applikation würde hier im View ein <a href="Schaltfl%C3%A4che" title="Schaltfläche">Button</a> erzeugt, dessen Klickevent anhand seiner ID im Controller mit dem Wechsel der Ansicht verknüpft wird. Der Hyperlink enthält zwar auch eine ID, es ist aber nicht seine eigene, sondern die Zieladresse der neuen Ansicht. Gleiches gilt für die Action-Adresse eines <a href="Webformular" title="Webformular">HTML-Formulars</a>.
</p><p>Beides sind für den Benutzer eines Browsers Controller-Elemente, deren funktionales Ziel allerdings in der Webseite codiert ist. Hiermit stellt sich die Herausforderung, bei der Erzeugung der Webseite die reine Ansicht von der Funktionalität der <a href="Uniform_Resource_Locator" title="Uniform Resource Locator">URL</a> zu trennen. Der Entwickler des Views soll sich keine Gedanken über die oft komplexe Controller-Funktionalität der URL machen müssen.
</p><p>Die Aufgabenteilung von View und Controller kann mittels einer ID einfach erreicht werden. In Analogie zur GUI-Applikation wird die ID im Controller mit der Zieladresse verknüpft. Im View kann die URL über eine Schnittstelle anhand der ID abgerufen werden oder die ID tritt als Platzhalter für die URL ein, zum Beispiel innerhalb eines Templates oder in Form von Link-Objekten im Rahmen eines Objektbaums.
</p>
<div class="mw-heading mw-heading4"><h4 id="JavaScript-Bibliotheken_und_AJAX-Anbindung">JavaScript-Bibliotheken und AJAX-Anbindung</h4></div>
<p>Hier wird ein Teil der Programme der Model-View-Controller-Architektur clientseitig im Browser eingesetzt, während ein anderer Teil, insbesondere das Model, auf dem Server verbleibt. JavaScript-Bibliotheken stellen vielfältige Widgets zur Verfügung. Diese Anwendungen nehmen eine Zwischenstellung zwischen Webanwendungen und desktopartigen Widget-Bibliotheken ein.
</p>
<div class="mw-heading mw-heading3"><h3 id="Serverseitige_Webanwendungen">Serverseitige Webanwendungen</h3></div>
<p>Der serverseitige Controller wertet in der Regel die eintreffenden Daten <i>(Request)</i> des Browsers aus. Meist tritt er dabei als Moderator zwischen Model und View auf. Serverseitig werden unter dem View diejenigen Programmteile verstanden, die den <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Code für die Antwort <i>(Response)</i> erzeugen. Häufig arbeitet der View mit HTML-Templates, deren Platzhalter mit den Daten des Models ersetzt werden.
</p>
<div class="mw-heading mw-heading4"><h4 id="Der_Controller_als_Mittler_zwischen_Model,_View_und_Webserver"><span id="Der_Controller_als_Mittler_zwischen_Model.2C_View_und_Webserver"></span>Der Controller als Mittler zwischen Model, View und Webserver</h4></div>
<p>Ein typischer Funktionsablauf (ohne HTTP-Redirect):
</p>
<pre> Browser -&gt; HTTP-Request -&gt; Webserver -&gt; Controller
&lt;=&gt; (beliebig häufig) Model oder View
Browser &lt;- HTTP-Response &lt;- Webserver &lt;- Controller
</pre>
<p>Der Aufgabenumfang des Controllers kann sehr variabel sein. Im einfachsten Fall ordnet er nur Model und View zu. Er kann aber auch vielfältige weitere Aufgaben übernehmen. Das hängt davon ab, wie aktiv oder passiv sich Model und View jeweils verhalten in Bezug auf die Validierung, die Internationalisierung, die Geschäftslogik, die Iterationen über die Daten beim Einfügen in den View und in Bezug auf zahlreiche andere Aspekte.
</p><p>Die Praxis variiert in Abhängigkeit vom persönlichen Programmierstil, Webservern, Programmiersprachen, Frameworks, dem Einsatz von Unit-Tests und den Projektanforderungen. Im Fall von PHP-Programmen steht zwischen Webserver und Controller z.&nbsp;B. noch der Programm-Interpreter, der bereits die Daten des HTTP-Requests aufbereitet und damit seinerseits Teilfunktionen des klassischen Controllers übernimmt.
</p>
<div class="mw-heading mw-heading4"><h4 id="HTTP-Redirect">HTTP-Redirect</h4></div>
<p>Nach dem Ändern des Models (<span lang="en">create</span> oder <span lang="en">update</span>) empfiehlt sich ein HTTP-Redirect. Mit dieser Technik wird das irrtümliche mehrfache Absenden durch einen Seitenreload verhindert. Außerdem wird dadurch das Schreiben des vorherigen Datensatzes vom Lesen des nachfolgenden Datensatzes getrennt, so dass sich die Controller sinnvoller organisieren lassen.
</p><p>Bei erfolgreicher Validierung greift die erste Anfrage, die noch den vorherigen Datensatz behandelt, schreibend auf das Model zu. Danach erfolgt ein Redirect. Die zweite Anfrage greift lesend zu und präsentiert bereits den nächsten Datensatz zur Bearbeitung. Für den Benutzer des Browsers fühlt sich das wie ein einziger Aufruf an.
</p>
<pre> Browser -&gt; HTTP-Request -&gt; Webserver -&gt; Controller -&gt; positive Validierung -&gt; Model (speichern der Daten nach Validierung)
Browser &lt;- HTTP-Redirect &lt;- Webserver &lt;- Controller (danach Redirect durch den Controller)
Browser -&gt; HTTP-Request -&gt; Webserver -&gt; Controller -&gt; Model -&gt; View (führt zu neuer Formularanfrage ohne Nutzeraktion)
Browser &lt;- HTTP-Response &lt;- Webserver &lt;- Controller (reguläre Response)
</pre>
<p>Bei einer gescheiterten Validierung wird dagegen der empfangene Datensatz direkt wieder im gleichen Formular zur Korrektur präsentiert. Ein Redirect entfällt. In der Regel entfällt auch eine erneute Abfrage des Models.
</p>
<pre> Browser -&gt; HTTP-Request -&gt; Webserver -&gt; Controller -&gt; negative Validierung -&gt; View (Formular zur Überarbeitung der Eingaben)
Browser &lt;- HTTP-Response &lt;- Webserver &lt;- Controller
</pre>
<div class="mw-heading mw-heading4"><h4 id="Controller-Kaskade">Controller-Kaskade</h4></div>
<p>Um dem Umfang der Funktionalität professioneller Webauftritte gerecht zu werden, muss der Controller strukturiert werden. Häufig wird der Controller kaskadenartig strukturiert. Entweder wird auf der untersten Ebene der Kaskade ein Controller angesteuert oder die Controller verzweigen im Ablauf der Kaskade baumartig und führen zu einer Verschachtelung des resultierenden Views.
</p><p><b>Front-Controller</b>, <b>Controller</b> und <b>Actions</b> sind häufig verwendete Benennungen für eine 3-schichtige Controller-Struktur. Diese Benennungen spiegeln den Aufbau von Datenmodellen und die zugehörigen Datenoperationen wider. Der <i>Front-Controller</i> verzweigt dabei zu einer Sicht auf das Datenmodell, die im Fokus steht und durch einen <i>Controller</i> gesteuert wird. Die <i>Actions</i> als unterste Controller-Ebene führen die Datenoperationen für diese Sicht aus, die man mit Create, Read, Update und Delete (<a href="CRUD" title="CRUD">CRUD</a>) zusammenfassen kann.
</p><p>Ein Beispiel für eine Controller-Schachtelung wäre eine Website, bei welcher der oberste Controller die Anzeige der Seiten steuert. In einer Seite können wiederum spezifisch mehrere MVC-Blöcke gleichzeitig eingesetzt werden, z.&nbsp;B. für einen zentralen Artikel und für unterschiedliche Kontext-Informationen.
</p>
<div class="mw-heading mw-heading4"><h4 id="Serverseitige_Controller_mit_dem_Remote_Presentation_Model_Muster">Serverseitige Controller mit dem Remote Presentation Model Muster</h4></div>
<p>Eine Weiterentwicklung des MVC Musters stellt das <a href="Remote_Presentation_Model" title="Remote Presentation Model">Remote Presentation Model</a> Muster da. Hierbei findet bereits in der Definition des Musters eine größere Trennung zwischen View und Controller statt, wodurch es in vielen Bereichen einfacher ist den Controller auf den Server auszulagern.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel:_MVC_realisiert_mit_JavaServer_Pages">Beispiel: MVC realisiert mit JavaServer Pages</h2></div>

<p>Die obige Abbildung zeigt das MVC-Modell für eine einfache Web-Registrierung. Der Benutzer (Client) fragt als erstes die Seite <code>register.jsp</code> an. Er bekommt eine Seite mit einem HTML-Formular als Antwort. Als <i><span lang="en">Action</span></i> ist im Formular die <code>validate.jsp</code> angegeben. Also schickt der <a href="Webbrowser" title="Webbrowser">Browser</a> nach dem Ausfüllen des Formulars die eingegebenen Daten an das <code>validate.jsp</code>, das in diesem Fall das <i><span lang="en">Control</span></i>-Modul ist und die eingegebenen Werte prüft. Es ist nur für die Prüfung und Verarbeitung der Daten zuständig. Selbst gibt <code>validate.jsp</code> dem Benutzer kein Feedback. Das <i><span lang="en">Control</span></i>-Modul gibt dazu die Kontrolle an die entsprechenden <i><span lang="en">Views</span></i> weiter. In diesem Fall entweder an <code>register.jsp</code>, wenn die Eingaben ungültig waren, sonst an die <code>ok.jsp</code>. Wird die Kontrolle wieder zurück an die <code>register.jsp</code> übergeben, zeigt <code>register.jsp</code> dem Anwender erneut das Formular mit z.&nbsp;B. einem Fehlerhinweis an. Der Browser schickt die korrigierten Daten wieder an die <code>validate.jsp</code>. Sind die Eingaben korrekt, werden die Daten zur Speicherung an die <code>UsersBean</code> übergeben. Die Kontrolle wird daraufhin an die <code>ok.jsp</code> abgegeben. Diese zeigt dem Anwender beispielsweise eine Erfolgsbestätigung.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Data_Context_Interaction" title="Data Context Interaction">Data Context Interaction</a> ist eine Weiterentwicklung und ein eher komplementäres Architekturmuster.</li>
<li><a href="Smart_UI" title="Smart UI">Smart UI</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Erich Gamma, Richard Helm, Ralph Johnson: <cite style="font-style:italic">Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software</cite>. 2. Auflage. Addison-Wesley, ISBN 978-3-8273-1862-6.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Model+View+Controller&amp;rft.au=Erich+Gamma%2C+Richard+Helm%2C+Ralph+Johnson&amp;rft.btitle=Entwurfsmuster.+Elemente+wiederverwendbarer+objektorientierter+Software&amp;rft.edition=2&amp;rft.genre=book&amp;rft.isbn=9783827318626&amp;rft.pub=Addison-Wesley" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite">Steffen Düsel: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210417082732/https://www.methodpark.de/blog/model-view-controller-mvc/"><i>Model-View-Controller (MVC).</i></a> Archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=https%3A%2F%2Fwww.methodpark.de%2Fblog%2Fmodel-view-controller-mvc%2F">Original</a></span> am <span style="white-space:nowrap;">17.&nbsp;April 2021</span><span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 17.&nbsp;Juni 2021</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AModel+View+Controller&amp;rft.title=Model-View-Controller+%28MVC%29&amp;rft.description=Model-View-Controller+%28MVC%29&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20210417082732%2Fhttps%3A%2F%2Fwww.methodpark.de%2Fblog%2Fmodel-view-controller-mvc%2F&amp;rft.creator=Steffen+D%C3%BCsel&amp;rft.source=https://www.methodpark.de/blog/model-view-controller-mvc/&amp;rft.language=de">&nbsp;</span></li>
<li><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160806075025/http://c2.com/cgi-bin/wiki?ModelViewController"><i>Model View Controller.</i></a> In: <i>Portland Pattern Repository.</i> Archiviert vom <span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fc2.com%2Fcgi-bin%2Fwiki%3FModelViewController">Original</a></span> am <span style="white-space:nowrap;">6.&nbsp;August 2016</span><span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 4.&nbsp;Dezember 2007</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AModel+View+Controller&amp;rft.title=Model+View+Controller&amp;rft.description=Model+View+Controller&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20160806075025%2Fhttp%3A%2F%2Fc2.com%2Fcgi-bin%2Fwiki%3FModelViewController&amp;rft.source=http://c2.com/cgi-bin/wiki?ModelViewController&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">Jeff Moore: <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160608102231/http://www.phpwact.org/pattern/model_view_controller"><i>Model View Controller.</i></a> Archiviert vom <span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fwww.phpwact.org%2Fpattern%2Fmodel_view_controller">Original</a></span> am <span style="white-space:nowrap;">8.&nbsp;Juni 2016</span><span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 30.&nbsp;Januar 2007</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AModel+View+Controller&amp;rft.title=Model+View+Controller&amp;rft.description=Model+View+Controller&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20160608102231%2Fhttp%3A%2F%2Fwww.phpwact.org%2Fpattern%2Fmodel_view_controller&amp;rft.creator=Jeff+Moore&amp;rft.source=http://www.phpwact.org/pattern/model_view_controller&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">Martin Fowler: <a rel="nofollow" class="external text" href="https://martinfowler.com/eaaDev/uiArchs.html"><i>GUI Architectures.</i></a><span class="Abrufdatum" style="display:none"> Abgerufen am 21.&nbsp;Mai 2011</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AModel+View+Controller&amp;rft.title=GUI+Architectures&amp;rft.description=GUI+Architectures&amp;rft.identifier=https%3A%2F%2Fmartinfowler.com%2FeaaDev%2FuiArchs.html&amp;rft.creator=Martin+Fowler&amp;rft.language=en">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite">Kamal Wickramanayake: <a rel="nofollow" class="external text" href="https://www.swview.org/blog/mvc-design-pattern-or-architectural-pattern"><i>Is MVC a design pattern or an architectural pattern?</i></a> In: <i>Software View.</i> 17.&nbsp;Juli 2010,<span class="Abrufdatum"> abgerufen am 16.&nbsp;Dezember 2016</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AModel+View+Controller&amp;rft.title=Is+MVC+a+design+pattern+or+an+architectural+pattern%3F&amp;rft.description=Is+MVC+a+design+pattern+or+an+architectural+pattern%3F&amp;rft.identifier=https%3A%2F%2Fwww.swview.org%2Fblog%2Fmvc-design-pattern-or-architectural-pattern&amp;rft.creator=Kamal+Wickramanayake&amp;rft.date=2010-07-17&amp;rft.language=en">&nbsp;</span></span>
</li>
</ol>
<style data-mw-deduplicate="TemplateStyles:r261921266">
/* start https://de.wikipedia.org/ */


.mw-parser-output table.erw-nav-zebra>tbody>:nth-child(odd){background-color:var(--dewiki-hintergrundfarbe-basis)}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste{background-color:#f5f5f5}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe{background-color:#e5ecf2}.mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,.mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#ececec}.mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt>.wikitable>*>tr{border-top:2px solid #fdfdfd!important;border-bottom:2px solid #fdfdfd!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-night .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-os .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable{border-top:0px!important;border-bottom:0px!important;margin-top:0!important;margin-bottom:0!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:first-of-type td{border-top:0px!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:last-of-type td{border-bottom:0px!important}


/* end https://de.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r260755238">
/* start https://de.wikipedia.org/ */


.mw-parser-output div.klappleiste{border:1px solid var(--dewiki-rahmenfarbe1);clear:both;font-size:95%;box-sizing:border-box;margin-top:1.5em;padding:2px}.mw-parser-output div.klappleiste:after{clear:both;content:"";display:block}.mw-parser-output div.klappleiste-bild{float:left;padding:2px}.mw-parser-output div.klappleiste-kopf{background:var(--dewiki-hintergrundfarbe5);color:var(--color-base,#202122);text-align:center;font-weight:bold}.mw-parser-output div.klappleiste.mw-collapsed .klappleiste-bild{display:none}.mw-parser-output div.klappleiste+div.klappleiste,.mw-parser-output div.klappleiste+link+div.klappleiste,.mw-parser-output div.klappleiste+link+link+div.klappleiste,.mw-parser-output div.klappleiste+link+style+div.klappleiste,.mw-parser-output div.klappleiste+style+div.klappleiste,.mw-parser-output div.klappleiste+style+style+div.klappleiste,.mw-parser-output div.klappleiste+style+link+div.klappleiste{margin-top:-1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}


/* end https://de.wikipedia.org/ */
</style>
<div class="klappleiste mw-collapsible navileiste erweiterte-navigationsleiste navigation-not-searchable center erw-nav-farbschema-blau" role="navigation">
<div class="klappleiste-kopf"><a href="Entwurfsmuster" title="Entwurfsmuster">Entwurfsmuster</a><div class="erweiterte-navigationsleiste-quicklinks" style="float:left; font-weight:normal; font-size:75%; margin-left:1em; margin-right:2em; display:none;"><span title="Vorlage anzeigen">V</span> – <span title="Diskussion anzeigen">D</span></div></div>
<div class="klappleiste-inhalt mw-collapsible-content" style="clear:left">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.1em;">


<tbody><tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Erzeugungsmuster" title="Erzeugungsmuster">Erzeugungsmuster</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Abstrakte_Fabrik" title="Abstrakte Fabrik">Abstrakte Fabrik</a>&nbsp;| <a href="Erbauer_(Entwurfsmuster)" title="Erbauer (Entwurfsmuster)">Erbauer</a>&nbsp;| <a href="Fabrikmethode" title="Fabrikmethode">Fabrikmethode</a>&nbsp;| <a href="Prototyp_(Entwurfsmuster)" title="Prototyp (Entwurfsmuster)">Prototyp</a>&nbsp;| <a href="Singleton_(Entwurfsmuster)" title="Singleton (Entwurfsmuster)">Singleton</a>&nbsp;| <a href="Multiton" title="Multiton">Multiton</a>&nbsp;| <a href="Objektpool" title="Objektpool">Objektpool</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Strukturmuster" title="Strukturmuster">Strukturmuster</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Adapter_(Entwurfsmuster)" title="Adapter (Entwurfsmuster)">Adapter</a>&nbsp;| <a href="Br%C3%BCcke_(Entwurfsmuster)" title="Brücke (Entwurfsmuster)">Brücke</a>&nbsp;| <a href="Decorator" title="Decorator">Decorator</a>&nbsp;| <a href="Fassade_(Entwurfsmuster)" title="Fassade (Entwurfsmuster)">Fassade</a>&nbsp;| <a href="Fliegengewicht_(Entwurfsmuster)" title="Fliegengewicht (Entwurfsmuster)">Fliegengewicht</a>&nbsp;| <a href="Kompositum_(Entwurfsmuster)" title="Kompositum (Entwurfsmuster)">Kompositum</a>&nbsp;| <a href="Stellvertreter_(Entwurfsmuster)" title="Stellvertreter (Entwurfsmuster)">Stellvertreter</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Verhaltensmuster_(Software)" title="Verhaltensmuster (Software)">Verhaltensmuster</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Beobachter_(Entwurfsmuster)" title="Beobachter (Entwurfsmuster)">Beobachter</a>&nbsp;| <a href="Besucher_(Entwurfsmuster)" title="Besucher (Entwurfsmuster)">Besucher</a>&nbsp;| <a href="Interpreter_(Entwurfsmuster)" title="Interpreter (Entwurfsmuster)">Interpreter</a>&nbsp;| <a href="Iterator_(Entwurfsmuster)" title="Iterator (Entwurfsmuster)">Iterator</a>&nbsp;| <a href="Kommando_(Entwurfsmuster)" title="Kommando (Entwurfsmuster)">Kommando</a>&nbsp;| <a href="Memento_(Entwurfsmuster)" title="Memento (Entwurfsmuster)">Memento</a>&nbsp;| <a href="Schablonenmethode" title="Schablonenmethode">Schablonenmethode</a>&nbsp;| <a href="Strategie_(Entwurfsmuster)" title="Strategie (Entwurfsmuster)">Strategie</a>&nbsp;| <a href="Vermittler_(Entwurfsmuster)" title="Vermittler (Entwurfsmuster)">Vermittler</a>&nbsp;| <a href="Zustand_(Entwurfsmuster)" title="Zustand (Entwurfsmuster)">Zustand</a>&nbsp;| <a href="Zust%C3%A4ndigkeitskette" title="Zuständigkeitskette">Zuständigkeitskette</a>&nbsp;| <a href="Interceptor_(Entwurfsmuster)" title="Interceptor (Entwurfsmuster)">Interceptor</a>&nbsp;| <a href="Nullobjekt_(Entwurfsmuster)" title="Nullobjekt (Entwurfsmuster)">Nullobjekt</a>&nbsp;| <a href="Protokollstapel" title="Protokollstapel">Protokollstapel</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>Muster für <a href="Objektrelationale_Abbildung" title="Objektrelationale Abbildung">objekt-<br>relationale Abbildung</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Transferobjekt" title="Transferobjekt">Datentransferobjekt</a>&nbsp;| Table Data Gateway&nbsp;| Row Data Gateway&nbsp;| <a href="Active_Record" title="Active Record">Active Record</a>&nbsp;| <a href="Unit_of_Work" title="Unit of Work">Unit of Work</a>&nbsp;| Identity Map&nbsp;| <a href="Lazy_Loading" title="Lazy Loading">Lazy Loading</a>&nbsp;| Identity Field&nbsp;| Dependent Mapping&nbsp;| Embedded Value&nbsp;| Serialized LOB&nbsp;| Inheritance Mapper&nbsp;| Metadata Mapping&nbsp;| Query Object&nbsp;| <a href="Command-Query-Responsibility-Segregation" title="Command-Query-Responsibility-Segregation">Command-Query-Responsibility-Segregation</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Nachrichten%C3%BCbermittlungsmuster" title="Nachrichtenübermittlungsmuster">Nachrichten-<br>übermittlungsmuster</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0;">
<div class="Broken-NavContent">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;border-collapse:collapse;">
<tbody><tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>Integrationsarten</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>File Transfer&nbsp;| Shared Database&nbsp;| Remote Procedure Invocation&nbsp;| Messaging
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>Nachrichtenaufbau</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Message_(Entwurfsmuster)" title="Message (Entwurfsmuster)">Message</a>&nbsp;| <a href="Command_Message" title="Command Message">Command Message</a>&nbsp;| <a href="Document_Message" title="Document Message">Document Message</a>&nbsp;| <a href="Event_Message" title="Event Message">Event Message</a>&nbsp;| Request-Reply&nbsp;| Return Address&nbsp;| Correlation Identifier&nbsp;| Message Sequence&nbsp;| Message Expiration&nbsp;| Format Indicator
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Teilnehmer_(Kommunikationssystem)" title="Teilnehmer (Kommunikationssystem)">Endpunkte</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Message Endpoint&nbsp;| Messaging Gateway&nbsp;| Messaging Mapper&nbsp;| Transactional Client&nbsp;| Polling Consumer&nbsp;| Event-driven Consumer&nbsp;| Competing Consumers&nbsp;| Message Dispatcher&nbsp;| Selective Consumer&nbsp;| Durable Subscriber&nbsp;| Idempotent Receiver&nbsp;| Service Activator
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Kanal_(Informationstheorie)" title="Kanal (Informationstheorie)">Kanäle</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Message Channel&nbsp;| Point-to-Point Channel&nbsp;| Publisher-Subscriber Channel&nbsp;| Datatype Channel&nbsp;| Invalid Message Channel&nbsp;| Dead Letter Channel&nbsp;| Guaranteed Delivery&nbsp;| Channel Adapter&nbsp;| Messaging Bridge&nbsp;| Message Bus
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Nachrichtenvermittlung" class="mw-redirect" title="Nachrichtenvermittlung">Nachrichtenvermittlung</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Pipes-and-Filters&nbsp;| Message Router&nbsp;| Content-based Router&nbsp;| Message Filter&nbsp;| Dynamic Router&nbsp;| Recipient List&nbsp;| Splitter&nbsp;| Aggregator&nbsp;| Resequencer&nbsp;| Composed Message Processor&nbsp;| Scatter-Gather&nbsp;| Routing Slip&nbsp;| Process Manager&nbsp;| Message Broker
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>Nachrichtenumwandlung</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Message Translator&nbsp;| Envelope Wrapper&nbsp;| Content Enricher&nbsp;| Content Filter&nbsp;| Claim Check&nbsp;| Normalizer&nbsp;| Canonical Data Model
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><b>Systemmanagement</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Control Bus&nbsp;| Detour&nbsp;| Wire Tap&nbsp;| Message History&nbsp;| Message Store&nbsp;| Smart Proxy&nbsp;| Test Message&nbsp;| Channel Purger
</p>
</td></tr>

























</tbody></table></div>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><i><b>andere</b></i>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Application Controller&nbsp;| <a href="Business_Delegate" title="Business Delegate">Business Delegate</a>&nbsp;| <a href="Data_Access_Object" title="Data Access Object">Data Access Object</a>&nbsp;| <a href="Dependency_Injection" title="Dependency Injection">Dependency Injection</a>&nbsp;| <a href="Extension_Interface" title="Extension Interface">Extension Interface</a>&nbsp;| <a href="Fluent_Interface" title="Fluent Interface">Fluent Interface</a>&nbsp;| <a href="Inversion_of_Control" title="Inversion of Control">Inversion of Control</a> (IoC)&nbsp;| <a href="Lock" title="Lock">Lock</a>&nbsp;| <a class="mw-selflink selflink">Model View Controller</a> (MVC)&nbsp;| <a href="Model_View_Presenter" title="Model View Presenter">Model View Presenter</a> (MVP)&nbsp;| <a href="Model_View_Update" title="Model View Update">Model View Update</a> (MVU)&nbsp;| <a href="Model_View_ViewModel" title="Model View ViewModel">Model View ViewModel</a> (MVVM)&nbsp;| Page Controller&nbsp;| <a href="Registry_(Entwurfsmuster)" title="Registry (Entwurfsmuster)">Registry</a>&nbsp;| Remote Facade&nbsp;| <a href="Repository_(Entwurfsmuster)" title="Repository (Entwurfsmuster)">Repository</a>&nbsp;| <a href="Service_Locator" class="mw-redirect" title="Service Locator">Service Locator</a>&nbsp;| Session State&nbsp;| Table Module&nbsp;| Template View&nbsp;| <a href="Threadpool" title="Threadpool">Threadpool</a>&nbsp;| Transaction Script&nbsp;| Transform View&nbsp;| Two-Step View&nbsp;| <a href="Value_Object" title="Value Object">Value Object</a>
</p>
</td></tr>



















































</tbody></table><div class="erw-nav-leiste" style="margin:.1em 0;padding:.1em 1em;text-align:left;font-size:90%;">Siehe auch: &nbsp;<a href="Analysemuster" title="Analysemuster">Analysemuster</a>&nbsp;| <a href="Architekturmuster" title="Architekturmuster">Architekturmuster</a>&nbsp;| <a href="Integrationsmuster" title="Integrationsmuster">Integrationsmuster</a>&nbsp;| <a href="SOA-Muster" title="SOA-Muster">SOA-Muster</a> </div></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-09-22" href="https://de.wikipedia.org/wiki/?title=Model_View_Controller&amp;oldid=248816402">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>